package priv.pront.code.mati.province;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

/**
 * @Description:
 * @Author: pront
 * @Time:2023-11-17 15:54
 */
public class MC0219_自驾游 {

    static int n, l, max, s;
    static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

    static class Info {
        public int price;
        public int distance;

        public Info(int distance, int price) {
            this.distance = distance;
            this.price = price;
        }
    }

    public static  void main(String[] args) throws IOException {
        for(;;){
            boolean flag = false;
            String value = bf.readLine();
            if(value == null) break;
            n = Integer.parseInt(value.split(" ")[0]);
            l = Integer.parseInt(value.split(" ")[1]);
            max = Integer.parseInt(value.split(" ")[2]);
            s = Integer.parseInt(value.split(" ")[3]);
            Queue<int[]> queue = new LinkedList<>();
            List<Info> list = new ArrayList<>();
            for (int i = 0; i < n; i++) {
                String value2 = bf.readLine();
                list.add(new Info(Integer.parseInt(value2.split(" ")[0]), Integer.parseInt(value2.split(" ")[1])));
            }
            list.sort(new MyComparator());
            if(list.get(0).distance > max){
                System.out.println("No");
                continue;
            }
            queue.add(new int[]{0, 0, l - max, s});
            while (!queue.isEmpty()) {
                int[] info = queue.poll();
                if (info[2] <= 0) {
                    System.out.println("Yes");
                    flag = true;
                    break;
                }
                for (int i = 0; i < list.size(); i++) {
                    Info info1 = list.get(i);
                    if(info[0] > info1.distance || max < info1.distance - info[0] || info1.price > info[3]) continue;
//                                       加油站到起点的距离   两个加油站之间的距离   剩下的距离   剩下的钱
                    queue.add(new int[]{info1.distance, info1.distance - info[0], info[2] - info1.distance - info[0],  info[3] - info1.price});
                }
            }
            if(flag) continue;
            System.out.println("No");
        }
    }

    public static class MyComparator implements Comparator<Info> {
        @Override
        public int compare(Info o1, Info o2) {
            return o1.distance - o2.distance;
        }
    }
}
